﻿#ifndef XQLOGINWIDGET_H
#define XQLOGINWIDGET_H
#include"XQWidget.h"
#include"XQHead.h"
#include<QMap>
#include<QIcon>
//登录小部件
class XQLoginWidget :public XQWidget
{
	Q_OBJECT
public:
	XQLoginWidget(QWidget* parent = nullptr,bool AutoUi=true);
	virtual~XQLoginWidget();
	struct User//用户信息
	{
		QPixmap portrait;//头像
		QString userName;//用户名/账号
		QString password;//密码
		bool savePasswordState=false;//记住密码状态
	};
public:
	//获取头像
	QPixmap portrait()const;
	//获得用户名
	QString currentUserName()const;
	//获取用户列表
	QStringList userNames()const;
	//获取用户
	User user(const QString& userName)const;
	//获取用户
	User user(int index)const;
	//获取用户列表
	QList<User> users()const;
	//获得密码
	QString password()const;
	//自动登录状态
	bool autoLoginState()const;
	//记住密码状态
	bool savePasswordState()const;
public :
	//设置当前用户名
	void setCurrentUserName(const QString& name);
	//添加一个用户
	void addUser(const QPixmap& portrait, const QString& userName, const QString& password = QString(), bool savePassword=true);
	void addUser(const QString& userName, const QString& password = QString(), bool savePassword = true);
	//删除一个用户
	void remove(const QString&userName);
	//清空用户列表
	void clearUsers();
	//设置密码
	void setPassword(const QString& password);
	//设置头像
	void setPortrait(const QPixmap& image=QPixmap(),bool save=true);
	//设置自动登录状态
	void setAutoLoginState(bool login);
	//设置记住密码状态
	void setSavePasswordState(bool save);

signals://信号 完成的信号都没有发出的
	void login(const QString& account, const QString& password);
	//用户名输入框文本改变信号
	void userNameChanged(const QString& account);
	//密码文本改变信号
	void passwordChanged(const QString& account);
	//自动登录状态改变
	void autoLoginStateChanged(bool login);
	//记住密码状态改变
	void savePasswordStateChanged(bool save);
	//注册账号信号
	void registerAccount();
	//找回密码信号
	void retrievePassword();
protected slots:
	//用户单机账号列表切换用户账号 效果实现
	void userIndexChanged(int index);
protected://初始化和ui界面
	//初始化
	void init()override;
	//初始化UI
	void init_ui()override;
	//第一行主要是头像
	virtual QBoxLayout* init_oneRow();
	//第二行主要是账户输入框
	virtual QBoxLayout* init_twoRow();
	//第三行主要是密码框
	virtual QBoxLayout* init_threeRow();
	//第四行主要是多选框和找回密码
	virtual QBoxLayout* init_fourRow();
	//第五行主要是登录按钮
	virtual QBoxLayout* init_fiveRow();
	//第六行主要是注册按钮
	virtual QBoxLayout* init_sixRow();
protected://事件
	//窗口大小改变事件
	virtual void resizeEvent(QResizeEvent* event)override;
	//窗口关闭事件
	virtual void closeEvent(QCloseEvent* event)override;
protected:
	//QMap<QString, QString> m_users;//用户列表<用户名,密码> ps:密码不为空切换账号时将勾选记住密码
	QSize m_userpassSize = QSize(350, 30);//用户和密码大小
	QSize m_btnSize= QSize(90,45);//用户和密码大小
	QSize m_loginbtnSize = QSize(350, 50);//登录大小
	QPixmap m_portrait;//头像原图
	QLabel* m_portraitLabel = nullptr;//头像
	QComboBox* m_userNameIn = nullptr;//用户名输入框
	QAction* m_userNameAction = nullptr;//用户名输入框的图标动作
	QLineEdit* m_passwordIn = nullptr;//密码输入框
	QAction* m_passwordAction = nullptr;//密码输入框的图标动作
	QCheckBox* m_autoLoginBtn = nullptr;//自动登录按钮
	QCheckBox* m_savePasswordBtn = nullptr;//保存密码按钮
	QPushButton* m_retrievePasswordBtn = nullptr;//找回密码按钮
	QPushButton* m_loginBtn = nullptr;//登录按钮
	QPushButton* m_registerBtn = nullptr;//注册按钮
};
#endif


